package tests;


import static org.junit.Assert.*;

import java.util.Calendar;

import metier.Personne;

import org.junit.Before;
import org.junit.Test;

import DAO.DAOJPA;
import DAO.DAOPersonne;
import DAO.DAOPersonneJPA;


public class testDAOPersonne {

	private DAOPersonne dao;
	private Personne pers1;

	@Before
	public void init() {
		pers1 = new Personne("nom","prenom",Calendar.getInstance().getTime());
		dao = DAOPersonneJPA.getInstance();
		DAOJPA.viderBase();
	}
	
	@Test
	public void testPersonne() {
		// Pr�conditions
		assertEquals(0,dao.getNombrePersonnes());	// rien dans la table
		

		dao.save(pers1);
		
		// Postconditions
		assertEquals(1,dao.getNombrePersonnes());	// Un article est dans la table
		assertNotEquals(-1, pers1.getId());	// Le code de l'auteur contient la cl� g�n�r�e par la BD
		
		// On v�rifie que l'auteur de la table est bien celui du test
		Personne	pers2 = dao.get(pers1.getId());	
		assertEquals(pers1, pers2);			// C'est bien le m�me code
		
		// On supprime l'objet que l'on vient de consulter
		dao.remove(pers2);				
		
		assertEquals(0,dao.getNombrePersonnes());	// La table est bien vide
		
		// Attention, on ne peut rien faire pour auteur1. Il parait toujours manag�...
	}
	
	@Test(expected=IllegalArgumentException.class)
	public void testSaveException() {

		dao.save(pers1);
		assertEquals(1,dao.getNombrePersonnes());

		// Ajouter le m�me auteur lance une exception
		dao.save(pers1);
		assertEquals(1,dao.getNombrePersonnes());
	}	
	
	@Test(expected=IllegalArgumentException.class)
	public void testRemoveException() {
	
		dao.save(pers1);
		assertEquals(1,dao.getNombrePersonnes());

		// Supprimer 2 fois le m�me auteur lance une exception 
		dao.remove(pers1);
		assertEquals(0,dao.getNombrePersonnes());
		
		dao.remove(pers1);
	}

}